Skip to content

feat: DANFE Simplificado Tipo 2 (NT 2026.003)#48

Merged
honjoya merged 4 commits into
mainfrom
feat/danfe-tipo-2
Jul 16, 2026
Merged

feat: DANFE Simplificado Tipo 2 (NT 2026.003)#48
honjoya merged 4 commits into
mainfrom
feat/danfe-tipo-2

Conversation

@honjoya

@honjoya honjoya commented Jul 3, 2026

Copy link
Copy Markdown

Resumo

Novo renderizador DanfeSimplificadoTipo2 — documento auxiliar em formato cupom para NF-e modelo 55 emitida com tpImp=6 (NT 2026.003 v1.00, producao 03/08/2026), nas 9 divisoes da NT:

Divisao Bloco
I — Cabecalho + titulo "DANFE Simplificado Tipo 2" BlocoCabecalhoSimplificadoT2
II — Produtos TabelaProdutosSimplificadoT2
III — Totais (troco sempre impresso) BlocoTotaisSimplificadoT2
III-A — IBS/CBS/IS (omitida sem o grupo) BlocoTributosIbsCbsT2
IV — Consulta (chave em 11 blocos de 4) BlocoConsultaChaveT2
V — QR Code (>= 25mm; omitida sem vm.QrCode) BlocoQrCodeT2
VI — Consumidor BlocoConsumidorT2
VII — Identificacao (dhEmi em horario local) BlocoIdentificacaoT2
VIII — Contingencia (2 locais + 2a via) / Homologacao BlocoMensagemContingenciaT2 + reuso BlocoInformacaoFiscal
IX — Mensagens (infCpl + Lei 12.741) BlocoMensagensT2
  • Pagina 280pt (~99mm, acima do minimo de 56mm), altura dinamica, mesmo padrao do DanfeNFC.
  • Contingencia pendente de autorizacao gera 2 paginas ("Via do Consumidor" / "Via do Estabelecimento").
  • DanfeViewModel: novos TributosIbsCbs, OperacaoNaoPresencial, PendenteAutorizacao, ValorPagoTotal, TrocoTotal.
  • Zero mudanca nos renderizadores existentes (Danfe A4 e DanfeNFC).

Spec OpenSpec em openspec/specs/danfe-simplificado-tipo-2/spec.md.

Testes

DanfeSimplificadoTipo2Tests (MSTest, padrao TextExtractor de DanfeCanceladaTests): 1 cenario por divisao + contingencia (4 ocorrencias da mensagem, 2 vias) + smoke de altura com 1/30/200 itens.

Emissor: nfe/dfetech-product-invoice-api — issue nfe/dfetech-product-invoice-api#268 (contexto NT 2026.002/003).

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adiciona o novo renderizador DanfeSimplificadoTipo2 (NT 2026.003, tpImp=6) para NF-e mod. 55 em layout “cupom” de largura fixa e altura dinâmica, composto por blocos empilhados (9 divisões) e com suíte de testes dedicada para validar cada divisão e cenários de contingência/altura.

Changes:

  • Implementa DanfeSimplificadoTipo2 e os blocos de renderização SimplificadoTipo2/* cobrindo as 9 divisões da NT (incl. 2 vias em contingência pendente).
  • Estende DanfeViewModel com TributosIbsCbs, OperacaoNaoPresencial, ValorPagoTotal e TrocoTotal, além de PendenteAutorizacao.
  • Inclui especificação OpenSpec e testes MSTest (DanfeSimplificadoTipo2Tests) + referência no .csproj.

Reviewed changes

Copilot reviewed 17 out of 17 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
openspec/specs/danfe-simplificado-tipo-2/spec.md OpenSpec com requisitos e cenários por divisão (incl. contingência e não-regressão).
DanfeSharp/Modelo/TributosIbsCbsViewModel.cs Novo ViewModel para totais IBS/CBS/IS (Divisão III-A).
DanfeSharp/Modelo/DanfeViewModel.cs Novas propriedades para NT 2026.003 (pendência, tributos IBS/CBS, totais de pago/troco, operação não presencial).
DanfeSharp/Extentions.cs Adiciona URL de consulta NF-e mod. 55 para a Divisão IV.
DanfeSharp/DanfeSimplificadoTipo2.cs Novo renderizador principal com composição por blocos, metadados e estimativa de altura.
DanfeSharp/Blocos/SimplificadoTipo2/BlocoCabecalhoSimplificadoT2.cs Divisão I (emitente + título).
DanfeSharp/Blocos/SimplificadoTipo2/TabelaProdutosSimplificadoT2.cs Divisão II (tabela de itens).
DanfeSharp/Blocos/SimplificadoTipo2/BlocoTotaisSimplificadoT2.cs Divisão III (totais, formas de pagamento, valor pago e troco sempre).
DanfeSharp/Blocos/SimplificadoTipo2/BlocoTributosIbsCbsT2.cs Divisão III-A (IBS/CBS/IS; omitida quando grupo ausente).
DanfeSharp/Blocos/SimplificadoTipo2/BlocoConsultaChaveT2.cs Divisão IV (URL de consulta + chave em 11 blocos).
DanfeSharp/Blocos/SimplificadoTipo2/BlocoQrCodeT2.cs Divisão V (QR Code opcional).
DanfeSharp/Blocos/SimplificadoTipo2/BlocoConsumidorT2.cs Divisão VI (identificação do consumidor / não identificado).
DanfeSharp/Blocos/SimplificadoTipo2/BlocoIdentificacaoT2.cs Divisão VII (número/série, emissão, via, protocolo).
DanfeSharp/Blocos/SimplificadoTipo2/BlocoMensagemContingenciaT2.cs Divisão VIII (mensagem de contingência pendente em 2 locais).
DanfeSharp/Blocos/SimplificadoTipo2/BlocoMensagensT2.cs Divisões VIII/IX (infAdFisco, infCpl e Lei 12.741).
DanfeSharp.Test/DanfeSimplificadoTipo2Tests.cs Nova suíte de testes por divisão + contingência + smoke de altura.
DanfeSharp.Test/DanfeSharp.Test.csproj Inclui o novo arquivo de testes no projeto.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread DanfeSharp/Blocos/SimplificadoTipo2/BlocoConsumidorT2.cs
Comment thread DanfeSharp/DanfeSimplificadoTipo2.cs
@honjoya
honjoya requested a review from john182 July 14, 2026 00:36

@rhfranzoni rhfranzoni left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code review automatizado — DANFE Simplificado Tipo 2 (NT 2026.003)

Feature bem estruturada e isolada (um bloco por divisão, zero-regressão respeitada nos leiautes existentes, .csproj de produção é SDK-style então os arquivos novos entram por globbing, e o reuso de BlocoInformacaoFiscal é geometricamente compatível com a página de 280pt). Boa cobertura de teste por divisão + contingência + smoke de altura.

Deixei 7 comentários inline. Os de maior impacto, recomendados antes do merge:

  1. Truncamento de infCpl/infAdFisco (≤160 chars) — risco de fidelidade fiscal (NT exige fidelidade ao XML).
  2. QR Code em JPEG — usar PNG (lossless) + dispor o Bitmap.

Refinamentos menores (não bloqueiam): overflow silencioso da estimativa de altura, mutação do viewModel de input, corte do código do produto (>15 vs Substring(0,10)) + NRE potencial, campo público morto OperacaoNaoPresencial, e o parâmetro state ignorado em UrlNFeConsulta.

Triviais só de nota (não inline): a linha de homologação (bloco NFC reusado) centraliza em x=132.5 vs x=140 do restante (~7,5pt); Salvar usa SerializationModeEnum.Incremental num doc novo (Standard gera menor); e vale confirmar que .Formatar() fixa cultura pt-BR para os asserts "60,00"/"9,00" não quebrarem no CI.

Segurança: baixo risco (render de texto/imagem a partir do ViewModel; sem injeção/segredos/manipulação de path).

Revisão gerada com Claude Code.

Comment thread DanfeSharp/Blocos/SimplificadoTipo2/BlocoMensagensT2.cs Outdated
Comment thread DanfeSharp/Blocos/SimplificadoTipo2/BlocoQrCodeT2.cs Outdated
Comment thread DanfeSharp/DanfeSimplificadoTipo2.cs
Comment thread DanfeSharp/DanfeSimplificadoTipo2.cs Outdated
Comment thread DanfeSharp/Blocos/SimplificadoTipo2/TabelaProdutosSimplificadoT2.cs Outdated
Comment thread DanfeSharp/Modelo/DanfeViewModel.cs Outdated
Comment thread DanfeSharp/Extentions.cs Outdated

@john182 john182 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gate 8 — Revisão de Código (7 perspectivas paralelas)

Revisão automatizada por 7 perspectivas independentes (Arquitetura, Segurança, Performance, Testabilidade, Observabilidade, Resiliência, Conformidade de Linguagem), adaptadas para stack .NET.

Resultado consolidado: REJEITADO — não por veto direto de nenhuma perspectiva individual (todas as 7 aprovaram isoladamente), mas pelo critério de consolidação do gate: "Duas ou mais perspectivas encontram issues ALTO no mesmo componente". Isso ocorre em BlocoQrCodeT2.cs (linha ~39): a Perspectiva de Performance encontrou o vazamento de Bitmap (já também apontado no review anterior do @rhfranzoni) e a Perspectiva de Resiliência encontrou, de forma independente, que uma falha na geração do QR Code (ex.: string malformada) propaga sem tratamento e aborta a composição de TODO o restante do documento — inclusive a 2ª via obrigatória em contingência pendente ("Via do Estabelecimento"). A combinação dos dois problemas no mesmo bloco eleva o risco: um recurso não descartado + ausência de degradação graciosa no mesmo ponto do código.

Esta revisão já encontrou o review anterior de @rhfranzoni e os comentários do Copilot no PR — os comentários abaixo cobrem apenas achados net-new das 7 perspectivas que ainda não estavam registrados (não duplico o que já foi apontado sobre vazamento de Bitmap/JPEG, mutação do viewModel, inconsistência de corte do código do produto, campo OperacaoNaoPresencial morto, ou o parâmetro state ignorado em UrlNFeConsulta).

Nota importante, para transparência: os comentários já existentes de @rhfranzoni e do Copilot apontam pelo menos 2 achados reais que as 7 perspectivas desta rodada NÃO capturaram: (1) BlocoConsumidorT2.cs:28 — detecção de CNPJ/CPF via .Trim().Length == 14 falha se o documento vier formatado com pontuação (pode rotular CNPJ como CPF), e (2) DanfeViewModel.cs:338 — campo público OperacaoNaoPresencial sem nenhum uso no PR. Ambos seguem válidos e não resolvidos.

Perspectiva Veredito Achados
1. Arquitetura ✅ APROVADO 1 MÉDIO, 2 BAIXO
2. Segurança ✅ APROVADO 2 BAIXO
3. Performance ✅ APROVADO 1 ALTO, 1 BAIXO
4. Testabilidade ✅ APROVADO 3 ALTO, 2 BAIXO/MÉDIO
5. Observabilidade ✅ APROVADO 1 BAIXO
6. Resiliência ✅ APROVADO 1 ALTO, 1 BAIXO
7. Conformidade de Linguagem ✅ APROVADO 1 MÉDIO, 2 BAIXO

RESULTADO: REJEITADO (regra de consolidação, não veto individual) — recomenda-se resolver o ponto de BlocoQrCodeT2.cs (dispose do Bitmap + tratamento de falha isolando o QR do resto do documento) antes do merge. Os demais achados ALTO (cobertura de teste em ramos de truncamento) podem ir em follow-up, mas idealmente antes do próximo gate.

Revisão gerada com Claude Code (Gate 8 — revisao-codigo).

Comment thread DanfeSharp/Blocos/SimplificadoTipo2/BlocoQrCodeT2.cs Outdated
Comment thread DanfeSharp/Blocos/SimplificadoTipo2/BlocoCabecalhoSimplificadoT2.cs
Comment thread DanfeSharp/Blocos/SimplificadoTipo2/TabelaProdutosSimplificadoT2.cs Outdated
Comment thread DanfeSharp/Blocos/SimplificadoTipo2/BlocoMensagensT2.cs Outdated
Comment thread DanfeSharp/Blocos/SimplificadoTipo2/BlocoConsumidorT2.cs
Comment thread DanfeSharp/DanfeSimplificadoTipo2.cs Outdated
Comment thread DanfeSharp/DanfeSimplificadoTipo2.cs
@honjoya
honjoya requested review from john182 and rhfranzoni July 16, 2026 21:34
@honjoya
honjoya merged commit 214cf22 into main Jul 16, 2026
2 checks passed
@honjoya
honjoya deleted the feat/danfe-tipo-2 branch July 16, 2026 21:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants